package com.zz.springboot.manager;

import com.zz.springboot.dto.RoleDto;
import com.zz.springboot.dto.UserDto;

import java.util.List;

public interface UserManager {
    /**
     * 验证用户名唯一性
     * @param username 用户名
     * @return
     */
    boolean verifyOnlyUsername(String username);

    /**
     * 新增用户
     * @param userId         用户ID
     * @param username       用户名
     * @param encodePassword 加密密码
     */
    void insertUserData(Long userId,String username, String encodePassword);

    /**
     * 新增用户有效天数
     * @param username       用户名
     * @param validDays      有效天数
     */
    void insertUserValidDays(String username, Integer validDays);

    /**
     * 更新用户有效天数
     * @param username       用户名
     * @param validDays      有效天数
     */
    void updateUserValidDays(String username, Integer validDays);

    /**
     * 根据用户名查询用户有效天数
     * @param username 用户名
     * @return
     */
    Integer selectUserValidDaysByUsername(String username);

    /**
     * 新增角色
     *
     * @param roleCode 角色编码
     * @param roleName 角色名称
     */
    void insertRoleData(String roleCode, String roleName);

    /**
     * 新增权限
     *
     * @param permName    权限名称
     * @param description 权限描述
     */
    void insertPermissionData(String permName, String description);

    /**
     * 新增用户角色关系
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     */
    void insertUserRoleData(Long userId, Integer roleId);

    /**
     * 新增角色权限关系
     *
     * @param roleId 角色ID
     * @param permId 权限ID
     */
    void insertRolePermissionData(Integer roleId, Integer permId);

    /**
     * 根据用户名查询用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    public UserDto selectUserByUsername(String username);

    /**
     * 根据角色编码查询角色信息
     *
     * @param roleCode 角色code
     * @return 角色信息
     */
    RoleDto selectRoleByRoleCode(String roleCode);

    /**
     * 根据用户名查所有角色code
     * @param userName
     * @return
     */
    List<String> getRolesByUserName(String userName);

    /**
     * 根据用户名查询所有权限name
     * @param userName
     * @return
     */
    List<String> getPermissionsByUserName(String userName);
}
